windows下c语言图形化gui编程踩坑记(环境:VScode) |
您所在的位置:网站首页 › vscode 图形化dgb调试 › windows下c语言图形化gui编程踩坑记(环境:VScode) |
我平时用的都是Mac和linux系统,但是无奈最近由于研究生复试需要的直播软件只能在windows上面跑,故被逼着用windows系统,而且只能在电脑前面等待一天轮到复试,复试内容是c语言。为了巩固c语言,我只能折腾windows上面的c语言编译器了。我了解的win上的c语言编译器如下: 1.MSVC编译器:这种编译器是微软自家开发的编译器,需要下载VS studio build tools 来安装,需要用到官方的Windows SDK,下载内容比较多,不够轻便。 去微软官方下载生成工具或者vs studio: visual studio 在这里我们下载mingw,首先会遇到一个问题,就是mingw分为两种,即32bit和64bit,每种都有对应的gcc和gdb,我们需要编译32bit的程序的时候就要使用32bit版本的mingw,同理,64位也一样。为了解决这个问题,在linux上面的gcc和gdb都有对应的multilib版本,比如gdb-multilib。 但是根据mingw64的todolist,gcc的multilib版本已经完成,但gdb的multilib还没有。 Support of multilib build in configure and in gcc. Parts are already present in gcc’s 4.5 version by using target triplet -w64-mingw32. gdb – Native support is present, but some features like multi-arch support (debugging 32-bit and 64-bit by one gdb) are still missing features. 所以我们姑且先从sourceforge上面下载三个版本即gcc-multilib版本、gdb+gcc 32bit版本、gdb+gcc 64bit版本。 gcc-multilib 32bit 64bit 下载完成之后,跟往常一样,给gcc-multilib里的bin添加环境变量,注意最好不要给另外两个版本添加环境变量,不然可能会有冲突,要添加也是将环境变量path里面居于gcc-multilib里的bin之后。 之后新建文件夹,命名为test,打开该文件夹,在里面创建test.c 输入以下代码: #include const char g_szClassName[] = "myWindowClass"; LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_LBUTTONDOWN: { char szFileName[MAX_PATH]; HINSTANCE hInstance = GetModuleHandle(NULL); GetModuleFileName(hInstance, szFileName, MAX_PATH); MessageBox(hwnd, szFileName, "This program is:", MB_OK | MB_ICONINFORMATION); } break; case WM_CLOSE: DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 0; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wc; HWND hwnd; MSG Msg; wc.cbSize = sizeof(WNDCLASSEX); wc.style = 0; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wc.lpszMenuName = NULL; wc.lpszClassName = g_szClassName; wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if(!RegisterClassEx(&wc)) { MessageBox(NULL, "Window Registration Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK); return 0; } hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, g_szClassName, "The title of my window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 240, 120, NULL, NULL, hInstance, NULL); if(hwnd == NULL) { MessageBox(NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK); return 0; } ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); while(GetMessage(&Msg, NULL, 0, 0) > 0) { TranslateMessage(&Msg); DispatchMessage(&Msg); } return Msg.wParam; }这段代码只使用的windows.h这个头文件,注意这个头文件来自mingw,与是否安装windows sdk无关。 之后使用vscode打开的时候选择debug |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |